package org.zhuzx.util;

import com.baomidou.mybatisplus.extension.conditions.query.ChainQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

/**
 * @author zhuzx 2022/8/23
 */
public class MybatisUtil {

	/**
	 * 分页循环处理数据
	 * @param query 查询条件
	 * @param pageSize 一页的数据量
	 * @param processing 查到数据之后的业务处理逻辑
	 * @param <E> 查询得到的表数据
	 * @param <R> 业务处理逻辑执行完毕得到的结果
	 * @return 所有数据处理完毕之后得到的结果总集
	 */
	//需要提供重载方法：有时候不需要返回结果，有时候需要一条数据返回一条结果。
	public static <E,R> List<R> pageCircularlyProcess(ChainQuery<E> query, int pageSize, Function<List<E>,R> processing) {
		int currentPage = 1;
		Page<E> page = new Page<>(currentPage, pageSize, false);//不执行count
		List<R> result = new ArrayList<>();
		do {
			page.setCurrent(currentPage);
			query.page(page);
			result.add(processing.apply(page.getRecords()));
			currentPage++;
		} while (page.getRecords().size() == pageSize);//本页未装满的话后面肯定没有了
		return result;
	}

}